package com.gisquest.cloud.entity.vo;

/**
 * @Author guowei
 * @Date 2020/6/17 10:49
 * @Description:请求返回数据的统一格式
 **/
public class RestResult<T> {
  /**
   * 0--成功,1--失败
   */
  private int code;
  /**
   * 响应消息--请求异常或失败返回的消息，说明失败原因
   */
  private String msg;
  /**
   * 异常堆栈--请求异常抛出的堆栈信息，用于开发人员快速定位问题(不是string的转为string)
   */
  String stackTrace;
  /**
   * 请求成功返回的实体类，不为null;特别需要注意，某些请求返回的结果非常大，
   * 例如，影像文件具体内容，这类特殊的反馈建议记录返回的内容的特征码，
   * 例如，上面提到的文件路径等
   */
  private T data;


  public int getCode() {
    return this.code;
  }


  public void setCode(int code) {
    this.code = code;
  }


  public String getMsg() {
    return this.msg;
  }


  public void setMsg(String msg) {
    this.msg = msg;
  }

  public String getStackTrace() {
    return stackTrace;
  }


  public void setStackTrace(String stackTrace) {
    this.stackTrace = stackTrace;
  }

  public T getData() {
    return this.data;
  }


  public void setData(T data) {
    this.data = data;
  }

  public RestResult<T> getRestResult(int code, String msg, String stackTrace, T value) {
    this.code = code;
    this.msg = msg;
    this.stackTrace = stackTrace;
    setData(value);
    return this;
  }


  /**
   * 请求成功，有返回数据
   * @param value
   * @return
   */
  public RestResult<T> makeSuccessResult(T value) {
    setCode(0);
    setMsg("SUCCESS");
    setStackTrace("");
    setData(value);
    return this;
  }

  /**
   * 请求成功无返回数据
   * @return
   */
  public RestResult<T> makeSuccessResult() {
    return getRestResult(0, "SUCCESS", "", null);
  }


  /**
   * 请求失败，又返回错误信息
   * @param msg
   * @param stackTrace
   * @return
   */
  public RestResult<T> makeFailResult(String msg, String stackTrace) {
    return getRestResult(1, msg, stackTrace, null);
  }

}
